虽然加入耗子叔的极客时间专栏有一段时间,但一直没有细看,知晓 ARTS 也是最近两天的事情,准备的不太充分,今天只达到了一部分目标,算是一次试练吧
Algorithm
题目(leetcode15)
给定一个包含 n 个整数的数组
nums
,判断nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。
解题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
int sum = 0;
List<List<Integer>> list = new ArrayList();
for (int i = 0; i < nums.length - 2; i++) {
if (i != 0 && nums[i] == nums[i - 1]) {
continue;
}
int leftNum = nums[i], middleIndex = i + 1, rightIndex = nums.length - 1;
int otherSum = sum - leftNum;
while (middleIndex < rightIndex) {
if (otherSum == nums[middleIndex] + nums[rightIndex]) {
list.add(Arrays.asList(leftNum, nums[middleIndex], nums[rightIndex]));
while (middleIndex < rightIndex && nums[middleIndex] == nums[middleIndex + 1]) {
middleIndex++;
}
while (middleIndex < rightIndex && nums[rightIndex] == nums[rightIndex - 1]) {
rightIndex--;
}
middleIndex++;
rightIndex--;
} else if (otherSum < nums[middleIndex] + nums[rightIndex]) {
while (middleIndex < rightIndex && nums[rightIndex] == nums[rightIndex - 1]) {
rightIndex--;
}
rightIndex--;
} else {
while (middleIndex < rightIndex && nums[middleIndex] == nums[middleIndex + 1]) {
middleIndex++;
}
middleIndex++;
}
}
}
return list;
}
}
Review
英文读书时就很差,所以对英文阅读一直很抵触,每次能找中文网站的绝不看英文版,实在只有英文的也是 copy 至 google 翻译看。今天完成了平时的目标外,只做了两道简单的算法题,英文技术文章的一般从哪看都还没有摸着门(刚看到耗子叔推荐了 Medium)。 立一个 flag:接下来的自己从入门到精通,每周认真看一篇英文技术文章,并输出总结(即 ARTS 中的 Review)。
TIPS
由于从事 Java 开发,以前一直深耕于公司的业务里面,技术实力一直很一般;最近开始在看 Spring 入门的教程,今天主要学习的是 AOP。
对于编程的惯性思维一直认为程序从头到尾都是一条线下来的,可以清晰的知道方法的调用者和被调用者是谁。今天接触的 AOP 却是在不动源代码的情况下,加入了日志等功能。
Spring AOP默认使用 JavaSE 动态代理(针对于实现了接口的类),而针对没有实现接口类则使用 CGLIB 动态代理,CGLIB 使用继承类的方式实现动态代理,所以无法代理 final 方法。
Share
10年上大学,14年勉强找了一份工作可以过的还将就,去年年中的时候通过 stormzhang 慢慢接触到一个新的圈子,渐渐的明确了短时期内自己的目标:Java 高级程序员。实现目标的攻略也是耗子叔写的:https://time.geekbang.org/column/article/8701